<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>

</body>
<script>
  /*  let p = new Promise((resolve, rejct) => {
      // 触发catch，方式1-通过reject
      rejct(new Error('产生错误'))
      // 触发catch，方式2-通过抛出一个错误
      throw new Error('产生错误')
      // 触发catch，方式3-resove一个失败promise
      // resolve(new Promise((resolve1, resolve2) => {
      //   reject2(new Error('产生错误'))
      // }))
      resolve(Promise.reject(new Error('产生错误')))
    })
    p.then(data => {

    }).catch(error => {
      console.log('error', error)
    })*/

  //应用promise的错误处理
  //页面当中方法
  async function handleLogin() {
    try {
      let token = await myLogin({
        mobile: '11',
        password: '123456'
      })
      console.log('登陆成功,token', token)
    } catch (err) {
      console.log(err)
    }
  }

  //接口当中方法
  function myLogin(data) {
    return request({
      url: '/sys/login',
      method: 'POST',
      data
    })
  }

  //axios的封装
  function request() {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        // 通过ajax发送请求获取数据
        // 服务器返回成功数据
        // let response = { success: true, data: 'abcd' }
        // 服务器返回失败数据 ===> 模拟错误
        let response = { success: false, data: null }
        // 关键代码
        resolve(interceptorsResponse(response))
      }, 0)
    })
  }

  //axios的响应拦截器
  function interceptorsResponse(response) {
    let { success, data } = response
    if (!success) {
      console.log('提示失败')
      // return
      // 触发catch方式1-抛出错误
      // throw new Error('产生错误')
      // 触发catch方式2-产生一个失败promise
      return Promise.reject(new Error('产生错误'))
    } else {
      return data
    }
  }

  // 执行页面方法
  handleLogin()
</script>
</html>
